// 该文件主要用来封装axios的配置（实例化请求配置、请求拦截器、相应拦截器）及相应的方法（登录跳转、消息提示、错误处理等）
import axios, { Method } from "axios";
import { Dialog } from 'vant';
// 请求失败的统一处理,简单处理，只要不是200，统一弹窗，有兴趣的同学可以根据状态码封装对应的弹窗
const errorHandle = (status: number, other?: string) => {
    status != 200 ? Dialog.alert({
        title: '请求失败',
        message: 'pengding',
        theme: 'round-button',
    }) : null
}
// 定义接口,该接口用来定义axios传输的参数
interface PendingType {
    url?: string;
    method?: Method;
    params: any;
    data: any;
    cancle: any;
}
// 取消重复请求
// const pending:Array<PendingType>=[];

/* 实例化请求配置 */
const instance = axios.create({
    // 请求时长
    timeout: 1000 * 30,
    // 请求的base地址 TODO:这块以后根据不同的模块调不同的api
    baseURL: "https://bd.php.huaxinestates.com/api",
    withCredentials: false,
})
/** 
 * 请求拦截器 
 * 每次请求前，如果存在token则在请求头中携带token 
 */
const userInfor=JSON.parse(localStorage.getItem("vuex")||"{}");
const token = userInfor.userInfor.token;
instance.interceptors.request.use(
    (config:any):any => {
        //接受JSON数据格式
        // config.headers['Content-Type'] = 'application/json;charset=utf-8';
        // 设置请求头
        config.headers['token'] = token;
        return config;
    },
    error => {
        return Promise.reject(error.data.error.message);
    }
)

// 响应拦截器
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});

export default instance